// RAP [rh] AboutDialog left out for now
///*******************************************************************************
// * Copyright (c) 2007, 2008 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * IBM Corporation - initial API and implementation
// *******************************************************************************/
//
//package org.eclipse.ui.internal.dialogs;
//
//import java.io.IOException;
//import java.security.GeneralSecurityException;
//import java.security.cert.Certificate;
//import java.security.cert.X509Certificate;
//import java.text.DateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.Properties;
//import java.util.StringTokenizer;
//import java.util.Map.Entry;
//
//import org.eclipse.core.runtime.IProgressMonitor;
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.core.runtime.OperationCanceledException;
//import org.eclipse.core.runtime.Status;
//import org.eclipse.core.runtime.jobs.Job;
//import org.eclipse.jface.dialogs.Dialog;
//import org.eclipse.jface.dialogs.DialogTray;
//import org.eclipse.jface.dialogs.TrayDialog;
//import org.eclipse.jface.resource.JFaceResources;
//import org.eclipse.osgi.signedcontent.SignedContent;
//import org.eclipse.osgi.signedcontent.SignedContentFactory;
//import org.eclipse.osgi.signedcontent.SignerInfo;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.custom.StyledText;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.GC;
//import org.eclipse.swt.graphics.Point;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.layout.GridLayout;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.swt.widgets.Label;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.swt.widgets.Text;
//import org.eclipse.ui.internal.WorkbenchMessages;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//import org.eclipse.ui.internal.about.AboutBundleData;
//import org.eclipse.ui.statushandlers.StatusManager;
//import org.osgi.framework.BundleContext;
//import org.osgi.framework.ServiceReference;
//
///**
// * @since 3.3
// *
// */
//public class BundleSigningTray extends DialogTray {
//
//
// private Text date;
// private StyledText certificate;
// private AboutBundleData data;
// private TrayDialog dialog;
//
// /**
// *
// */
// public BundleSigningTray(TrayDialog dialog) {
// this.dialog = dialog;
// }
//
// public void setData(AboutBundleData data) {
// this.data = data;
// startJobs();
// }
//
// /* (non-Javadoc)
// * @see org.eclipse.jface.dialogs.DialogTray#createContents(org.eclipse.swt.widgets.Composite)
// */
// protected Control createContents(Composite parent) {
// Composite content = new Composite(parent, SWT.NONE);
// content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// GridLayout layout = new GridLayout(2, false);
// content.setLayout(layout);
// // date
// Color backgroundColor = parent.getDisplay().getSystemColor(
// SWT.COLOR_WIDGET_BACKGROUND);
// {
// Label label = new Label(content, SWT.NONE);
// label.setText(WorkbenchMessages.BundleSigningTray_Signing_Date);
// GridData data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
// date = new Text(content, SWT.READ_ONLY);
// GC gc = new GC(date);
// gc.setFont(JFaceResources.getDialogFont());
// Point size = gc.stringExtent(DateFormat.getDateTimeInstance().format(new Date()));
// data.widthHint = size.x;
// gc.dispose();
// date.setText(WorkbenchMessages.BundleSigningTray_Working);
// date.setLayoutData(data);
// date.setBackground(backgroundColor);
// }
// // signer
// {
// Label label = new Label(content, SWT.NONE);
// label.setText(WorkbenchMessages.BundleSigningTray_Signing_Certificate);
// GridData data = new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
// data.horizontalSpan = 2;
// data = new GridData(SWT.FILL, SWT.FILL, true, true);
// data.horizontalSpan = 2;
// certificate = new StyledText(content, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP);
// certificate.setText(WorkbenchMessages.BundleSigningTray_Working);
// certificate.setLayoutData(data);
// }
//
// // problems
//// {
//// Label label = new Label(content, SWT.NONE);
//// label.setText("Problems:"); //$NON-NLS-1$
////
//// }
// Dialog.applyDialogFont(content);
//
// startJobs(); // start the jobs that will prime the content
//
// return content;
// }
//
// /**
// *
// */
// private void startJobs() {
// if (!isOpen())
// return;
// certificate.setText(WorkbenchMessages.BundleSigningTray_Working);
// date.setText(WorkbenchMessages.BundleSigningTray_Working);
// final BundleContext bundleContext = WorkbenchPlugin.getDefault()
// .getBundleContext();
// final ServiceReference factoryRef = bundleContext
// .getServiceReference(SignedContentFactory.class.getName());
// if (factoryRef == null) {
// StatusManager.getManager().handle(
// new Status(IStatus.WARNING, WorkbenchPlugin.PI_WORKBENCH,
// WorkbenchMessages.BundleSigningTray_Cant_Find_Service),
// StatusManager.LOG);
// return;
// }
//
// final SignedContentFactory contentFactory = (SignedContentFactory) bundleContext
// .getService(factoryRef);
// if (contentFactory == null) {
// StatusManager.getManager().handle(
// new Status(IStatus.WARNING, WorkbenchPlugin.PI_WORKBENCH,
// WorkbenchMessages.BundleSigningTray_Cant_Find_Service),
// StatusManager.LOG);
// return;
// }
//
// final AboutBundleData myData = data;
// final Job signerJob = new Job(NLS.bind(WorkbenchMessages.BundleSigningTray_Determine_Signer_For, myData.getId())) {
//
// protected IStatus run(IProgressMonitor monitor) {
// try {
// if (myData != data)
// return Status.OK_STATUS;
// SignedContent signedContent = contentFactory.getSignedContent(myData
// .getBundle());
// if (myData != data)
// return Status.OK_STATUS;
// SignerInfo[] signers = signedContent.getSignerInfos();
// final String signerText, dateText;
// final Shell dialogShell = dialog.getShell();
// if (!isOpen() && BundleSigningTray.this.data == myData)
// return Status.OK_STATUS;
//
// if (signers.length == 0) {
// signerText = WorkbenchMessages.BundleSigningTray_Unsigned;
// dateText = WorkbenchMessages.BundleSigningTray_Unsigned;
// } else {
// Properties [] certs = parseCerts(signers[0].getCertificateChain());
// if (certs.length == 0)
// signerText = WorkbenchMessages.BundleSigningTray_Unknown;
// else {
// StringBuffer buffer = new StringBuffer();
// for (Iterator i = certs[0].entrySet().iterator(); i.hasNext(); ) {
// Map.Entry entry = (Entry) i.next();
// buffer.append(entry.getKey());
// buffer.append('=');
// buffer.append(entry.getValue());
// if (i.hasNext())
// buffer.append('\n');
// }
// signerText = buffer.toString();
// }
//
// Date signDate = signedContent.getSigningTime(signers[0]);
// if (signDate != null)
// dateText = DateFormat.getDateTimeInstance().format(
// signDate);
// else
// dateText = WorkbenchMessages.BundleSigningTray_Unknown;
// }
//
// Display display = dialogShell.getDisplay();
// display.asyncExec(new Runnable() {
//
// public void run() {
// // check to see if the tray is still visible and if we're still looking at the same item
// if (!isOpen() && BundleSigningTray.this.data != myData)
// return;
// certificate.setText(signerText);
// date.setText(dateText);
// }
// });
//
// } catch (IOException e) {
// return new Status(IStatus.ERROR,
// WorkbenchPlugin.PI_WORKBENCH, e.getMessage(), e);
// } catch (GeneralSecurityException e) {
// return new Status(IStatus.ERROR,
// WorkbenchPlugin.PI_WORKBENCH, e.getMessage(), e);
// }
// return Status.OK_STATUS;
// }
// };
// signerJob.setSystem(true);
// signerJob.belongsTo(signerJob);
// signerJob.schedule();
//
// Job cleanup = new Job(WorkbenchMessages.BundleSigningTray_Unget_Signing_Service) {
//
// protected IStatus run(IProgressMonitor monitor) {
// try {
// getJobManager().join(signerJob, monitor);
// } catch (OperationCanceledException e) {
// } catch (InterruptedException e) {
// }
// bundleContext.ungetService(factoryRef);
// return Status.OK_STATUS;
// }
// };
// cleanup.setSystem(true);
// cleanup.schedule();
//
// }
//
// /**
// *
// */
// private boolean isOpen() {
// return certificate != null && !certificate.isDisposed();
// }
//
// private Properties[] parseCerts(Certificate[] chain) {
// List certs = new ArrayList(chain.length);
// for (int i = 0; i < chain.length; i++) {
// if (!(chain[i] instanceof X509Certificate))
// continue;
// Map cert = parseCert(((X509Certificate) chain[i]).getSubjectDN().getName());
// if (cert != null)
// certs.add(cert);
// }
// return (Properties []) certs.toArray(new Properties[certs.size()]);
//
//
// }
//
// /**
// * @param certString
// * @return
// */
// private Properties parseCert(String certString) {
// StringTokenizer toker = new StringTokenizer(certString, ","); //$NON-NLS-1$
// Properties cert = new Properties();
// while (toker.hasMoreTokens()) {
// String pair = toker.nextToken();
// int idx = pair.indexOf('=');
// if (idx > 0 && idx < pair.length() - 2) {
// String key = pair.substring(0, idx).trim();
// String value = pair.substring(idx + 1).trim();
// if (value.length() > 2) {
// if (value.charAt(0) == '\"')
// value = value.substring(1);
//
// if (value.charAt(value.length() - 1) == '\"')
// value = value.substring(0, value.length() - 1);
// }
// cert.setProperty(key, value);
// }
// }
// return cert;
// }
//
//}